/*
 * Description:agent管理类
 */
#ifndef AGENTMANAGER_H
#define AGENTMANAGER_H

#include <mutex>
#include "rpc_service/recvfrom_host.h"
#include "rpc_service/sendto_host.h"
#include "singleton.h"

namespace GUEST {
class AgentManager {
public:
    /********************
     * 函数：Init
     * 功能：初始化VMAgent
     * 参数：NA
     * 返回：0初始化成功，-1失败
     ********************/
    int Init();

    /********************
     * 函数：GustLinkInit
     * 功能：GustLink初始化
     * 参数：NA
     * 返回：0初始化成功，-1失败
     ********************/
    int GustLinkInit();

    /********************
     * 函数：Quit
     * 功能：退出VMAgent
     * 参数：NA
     * 返回：NA
     ********************/
    void Quit();

    /********************
     * 函数：Shutdown
     * 功能：处理windows关机事件
     * 参数：NA
     * 返回：NA
     ********************/
    void Shutdown();

    /********************
     * 函数：Shutdown
     * 功能：处理windows快速启动关机事件
     * 参数：NA
     * 返回：NA
     ********************/
    void QuickStartShutdown();

    AgentManager() = default;
    ~AgentManager() = default;
private:
    std::mutex m_mutex {};
    std::unique_ptr<RecvFromHost> m_recvfromHost = nullptr;
    std::shared_ptr<WINCONTROL::SendToHost> m_sendtoHost = nullptr;
    bool m_stopVMAgent = false;
    // CPU使用率更新时间间隔，单位:ms
    std::int32_t cpuUpdateSleepTime = 1000;
};

#define VMAGENT_MANAGER SingletonNew<GUEST::AgentManager>::GetInstance()
} // namespace GUEST

#endif // AGENTMANAGER_H